package com.jml.springmvc.servlet007.config;


import java.util.Set;
import javax.servlet.ServletContainerInitializer;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRegistration.Dynamic;
import javax.servlet.annotation.HandlesTypes;

/**
 * @author:jml
 * @date: 2019/10/8 10:15
 * @description：
 */
@HandlesTypes(value = MyHandlesTypes.class)
public class MyServletContainerInitializer implements ServletContainerInitializer {
	
	/**
	 * 在servlet容器初始化的时候加入一些操作 比如：第三方依赖信息，监听器，手动加载servlet，过滤器
	 *
	 * @Param 参数set:可以获取到继承MyHandlesTypes类的所有子类class信息
	 */
	@Override
	public void onStartup(Set<Class<?>> set, ServletContext servletContext)
			throws ServletException {
		for (Class<?> c : set) {
			System.out.println("c" + c);
		}
		//往容器中添加servlet
		Dynamic myPayServlet = servletContext.addServlet("myPayServlet", new MyPayServlet());
		//给当前servlet设置url映射地址
		myPayServlet.addMapping("/pay");
		//往容器中添加过滤器
		//servletContext.addFilter("", new Object());
		//往容器中添加监听器
		//servletContext.addListener();
		
		//如何让tomcat加载到该类 MyServletContainerInitializer，在resources目录下创建 META-INF/services/javax.servlet.ServletContainerInitializer文件
		//文件内容就是需要加载MyServletContainerInitializer的全限定类名
		//这个是tomcat的强制规范
		//springmvc源码里面也有这个，只是里面放的类是SpringServletContainerInitializer
		//springmvc可以没有web.xml去实现启动，基于注解方式启动。
		
	}
}
